.PHONY: all clean

#nombre del ejecutable
target = common

#flags comunes del compilador (para debug)
#CFLAGS = -Wall -O0 -ggdb -DDEBUG -fno-inline  -std=c99
CFLAGS = -Wall -O0 -fno-inline  -std=c99


#Archivos objeto en arquitectura MIPS.
mips_o = main.o mcd.o mcm.o
#Archivos objeto en otras arquitecturas.
other_o = main.o funciones.o 

#Compila el programa y genera el ejecutable definido en target (default).
#Funciona para todas las arquitecturas, pero no usa el assembly específico
#de MIPS. 
all: $(target)

$(target): $(other_o)
	$(CC) $(LDFLAGS) $(other_o) $(LOADLIBS) $(LDLIBS) -o $(target)
	
#Compila el programa y genera el ejecutable definido en target.
#Para arquitectura MIPS (usa las versiones escritas en assembly
#de mcd y mcm).
mips: $(mips_o)
	$(CC) $(LDFLAGS) $(mips_o) $(LOADLIBS) $(LDLIBS) -o $(target)
	
mcm.o: asm-mips/mcm.S
mcd.o: asm-mips/mcd.S
	
#Detiene el proceso justo antes del ensamblado, generando
#el código assembly (un archivo .s para cada archivo de entrada).
#Sólo para MIPS (ejecutar en el NetBSD que corre en el gxemul).
#Genera el assembly usando las definiciones en C de mcd y mcm.
asm:
	$(CC) $(CFLAGS) -S -mrnames $(other_o:.o=.c)
	
#Elimina el ejecutable, los archivos objeto y los archivos de
#assembly generados con asm.
clean:
	@echo "CLEAN"; rm -f $(other_o) $(other_o:.o=.s) $(mips_o) $(target)  
